<?php

/**
 * factura actions.
 *
 * @package    aeropostal
 * @subpackage factura
 * @author     Your name here
 */
class facturaActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    $pager = new sfPropelPager('Factura', sfConfig::get('app_max_facturas'));
    $c = new Criteria;
    if($this->getUser()->hasCredential(array('analista'),false)){
          $in_query = 'factura.numero IN (SELECT clave FROM log where estructura like "Factura" and usuario="'.$this->getUser().'")';
          $c->add(FacturaPeer::NUMERO, $in_query, Criteria::CUSTOM);  
    }
	$pager->setCriteria($c);
	// Se establece que la pagina principal del index sera la 1
	$pager->setPage($this->getRequestParameter('page', 1));
	$pager->init();
	 // Se Prepara la informaci�n para usarla en la vista.
	$this->pager = $pager;
  }

  public function executeShow(sfWebRequest $request)
  {
    $this->Factura = FacturaPeer::retrieveByPk($request->getParameter('numero'),$request->getParameter('proveedor'));
    $this->forward404Unless($this->Factura);
  }

  public function executeNew(sfWebRequest $request)
  {
    $this->form = new FacturaForm();
  }

  public function executeCreate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST));

    $this->form = new FacturaForm();

    $this->processForm($request, $this->form);

    $this->setTemplate('new');
  }

  public function executeEdit(sfWebRequest $request)
  {
    $this->forward404Unless($Factura = FacturaPeer::retrieveByPk($request->getParameter('numero'),$request->getParameter('proveedor')), sprintf('Object Factura does not exist (%s).', $request->getParameter('numero'),$request->getParameter('proveedor')));
    $this->form = new FacturaForm($Factura);
  }

  public function executeUpdate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
    $this->forward404Unless($Factura = FacturaPeer::retrieveByPk($request->getParameter('numero'),$request->getParameter('proveedor')), sprintf('Object Factura does not exist (%s).', $request->getParameter('numero'),$request->getParameter('proveedor')));
    $this->form = new FacturaForm($Factura);

    $this->processForm($request, $this->form);

    $this->setTemplate('edit');
  }

  public function executeDelete(sfWebRequest $request)
  {
    $request->checkCSRFProtection();

    $this->forward404Unless($Factura = FacturaPeer::retrieveByPk($request->getParameter('numero'),$request->getParameter('proveedor')), sprintf('Object Factura does not exist (%s).', $request->getParameter('numero'),$request->getParameter('proveedor')));
    $Factura->delete();
    $numero = $request->getParameter('numero');
    LogPeer::logBorrar($numero,$this->getUser(),'Factura');
    $this->redirect('factura/index');
  }

  protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
        try{
          $Factura = $form->save();
          $numero = $request->getPostParameter('factura[numero]');
          LogPeer::log($numero,$this->getUser(),'Factura');
          $estatus = $request->getPostParameter('factura[estatus]');
          if($estatus=='Incorrecto')
          {
              $respuesta = ReclamoPeer::crearReclamo($request->getPostParameter('factura[numero]'));
              LogPeer::log($numero.preg_replace('([^A-Za-z0-9])', '', date("Y-m-d")),$this->getUser(),'Reclamo');
          }
          $this->redirect('factura/index');  
        }catch (Exception $e){
            $this->getUser()->setFlash('error', 'No se puede registrar esta Factura, el número de factura ya existe.');
            return sfView::NONE;
        }
    }
  }
  
  // Funci�n que dado un login de empleado devuelve los nombres y apellidos del mismo en un String
	public function executeMostrarTipoProveedor(sfWebRequest $request)
	{
		$proveedor = $request->getParameter('proveedor');
		$respuesta =ProveedorPeer::doSelectTipoProveedorByRif($proveedor);
		$this->getResponse()->setContent($respuesta);
		
		// Indicamos que no debemos enviar la respuesta a otra p�gina sino a la misma que ejecut� el request
		return sfView::NONE;
	}
        public function executeMostrarRequerimientos(sfWebRequest $request)
	{
		$cargo = $request->getParameter('cargoFactura');
		$respuesta = CargoFacturaPeer::doSelectById($cargo);
		$this->getResponse()->setContent($respuesta);
		return sfView::NONE;
	}
        public function executeEsCombustible(sfWebRequest $request)
	{
		$cargo = $request->getParameter('cargoFactura');
		$respuesta = CargoFacturaPeer::doSelectTipoCombById($cargo);
		$this->getResponse()->setContent($respuesta);
		return sfView::NONE;
	}
        public function executeMostrarTasaImpuesto(sfWebRequest $request)
	{
		$impuesto = $request->getParameter('impuesto');
		$respuesta = ImpuestoPeer::doSelectPorcentajeById($impuesto);
		$this->getResponse()->setContent($respuesta);
		return sfView::NONE;
	}
        public function executeMostrarTasaCambio(sfWebRequest $request)
	{
		$tasaCambio = $request->getParameter('tasaCambio');
                $tasaCambio1 = $request->getParameter('tasaCambio1');
		$respuesta = TasacambPeer::doSelectTasaByMonedas($tasaCambio,$tasaCambio1);
		$this->getResponse()->setContent($respuesta);
		return sfView::NONE;
	}
        public function executeMostrarTasaConv(sfWebRequest $request)
	{
		$tasaConv = $request->getParameter('tasaConv');
                $tasaConv1 = $request->getParameter('tasaConv1');
		$respuesta = TasaconvPeer::doSelectTasaByMedidas($tasaConv,$tasaConv1);
		$this->getResponse()->setContent($respuesta);
		return sfView::NONE;
	}
        public function executeMostrarBoletas(sfWebRequest $request)
	{
		$proveedor = $request->getParameter('proveedor');
                $estacion = $request->getParameter('estacion');
                $factura = $request->getParameter('factura');
		$respuesta = BoletaPeer::doSelectBoletasByProveedor($proveedor, $estacion, $factura);
		$this->getResponse()->setContent($respuesta);
		return sfView::NONE;
	}
        public function executeMostrarMonedaMedida(sfWebRequest $request)
	{
		$proveedor = $request->getParameter('proveedor');
		$respuesta = ProveedorPeer::doSelectMonedaUMedidaByRif($proveedor);
		$this->getResponse()->setContent($respuesta);
		return sfView::NONE;
	}
        public function executeMostrarDatos(sfWebRequest $request)
	{
		$empresa = $request->getParameter('empresa');
		$respuesta = CompaniaPeer::doSelectMonedaUMedidaById($empresa);
		$this->getResponse()->setContent($respuesta);
		return sfView::NONE;
	}
        public function executeMostrarMoneda(sfWebRequest $request)
	{
		$moneda = $request->getParameter('moneda');
		$respuesta = MonedaPeer::doSelectById($moneda);
		$this->getResponse()->setContent($respuesta);
		return sfView::NONE;
	}
        public function executeEnlazarBoletas(sfWebRequest $request)
	{
		$boleta = $request->getParameter('boleta');
                $proveedor = $request->getParameter('proveedor');
                $factura = $request->getParameter('numFactura');
		$respuesta = BoletaPeer::doModifyBoletasByNumero($boleta, $factura, $proveedor);
		$this->getResponse()->setContent($respuesta);
		return sfView::NONE;
	}
        public function executeDesenlazarBoletas(sfWebRequest $request)
	{
		$boleta = $request->getParameter('boleta');
                $proveedor = $request->getParameter('proveedor');
		$respuesta = BoletaPeer::doModifyBoletasVaciaByNumero($boleta, $proveedor);
		$this->getResponse()->setContent($respuesta);
		return sfView::NONE;
	}
        public function executeEsComb(sfWebRequest $request)
	{
		$cargo = $request->getParameter('cargo');
		$respuesta = CargoFacturaPeer::doSelectTipoCombById($cargo);
		$this->getResponse()->setContent($respuesta);
		return sfView::NONE;
	}
        public function executePrecioComb(sfWebRequest $request)
	{
                $tipoComb = $request->getParameter('tipoComb');
                $proveedor = $request->getParameter('proveedor');
		$estacion = $request->getParameter('estacion');
		$respuesta = PrecioCombPeer::doSelectPrecioByTipoCombProveedorEstacion($tipoComb, $proveedor, $estacion);
		$this->getResponse()->setContent($respuesta);
		return sfView::NONE;
	}
        public function executeGenerarReclamo(sfWebRequest $request)
	{
                $factura = $request->getParameter('factura');
		$respuesta = ReclamoPeer::crearReclamo($factura);
		$this->getResponse()->setContent($respuesta);
		return sfView::NONE;
	}
        public function executeAddDetFacturaForm($request)
        {
             $this->forward404unless($request->isXmlHttpRequest());
             $number = intval($request->getParameter("num"));
             $numbero = $request->getParameter('numero');
             $numbero1 = $request->getParameter('proveedor');
             if($factura = FacturaPeer::retrieveByPk($numbero,$numbero1)){
             $form = new FacturaForm($factura);
             }else{
             $form = new FacturaForm(null);
             }
             $form->addDetFactura($number);
             return $this->renderPartial('addDetFactura',array('form' => $form, 'num' => $number));
        }
}
